小编典典

单元测试异步操作

all

我想对我拥有的执行异步操作的方法进行单元测试:

 Task.Factory.StartNew(() =>
        {
            // method to test and return value
            var result = LongRunningOperation();
        });

我在我的单元测试(用 c# 编写)中存根了必要的方法等,但问题是在我断言测试之前异步操作没有完成。

我怎样才能解决这个问题?我应该创建 TaskFactory 的模拟或任何其他对异步操作进行单元测试的技巧吗?


阅读 132

收藏
2022-07-07

共1个答案

小编典典

您必须有某种方法来伪造任务创建。

如果您将Task.Factory.StartNew调用移至某个依赖项 ( ILongRunningOperationStarter),那么您可以创建一个替代实现,用于TaskCompletionSource创建在您希望它们完成的位置完成的任务。

如果您不想伪造整个任务创建,您可以替换任务工厂,并以这种方式控制时间 - 但老实说,我怀疑这会更麻烦。

2022-07-07